package commons.ui.listener;

import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.widgets.Text;

import commons.utils.ConversionUtils;
import commons.utils.StringUtils;

public class DoubleVerifyListener implements VerifyListener {
    public void verifyText(VerifyEvent e) {
	String eText = e.text;
	if (StringUtils.isBlank(eText)) {
	    return;
	}
	if (ConversionUtils.toDouble(eText) == null) {
	    if (!eText.equals(".") && !eText.equals("-") && !eText.equals(",")) {
		e.display.beep();
		e.doit = false;
		return;
	    }
	}
	String newText = ((Text) e.widget).getText();
	newText = newText.substring(0, e.start) + eText + newText.substring(e.end);
	if (ConversionUtils.toDouble(newText) == null) {
	    if (!newText.equals(".") && !newText.equals("-") && !newText.equals("-.")) {
		e.display.beep();
		e.doit = false;
		return;
	    }
	}
    }

    protected void verifyPositive(VerifyEvent e) {
	String eText = e.text;
	if (StringUtils.isBlank(eText)) {
	    return;
	}
	if (ConversionUtils.toDouble(eText) == null) {
	    if (!eText.equals(".") && !eText.equals(",")) {
		e.display.beep();
		e.doit = false;
		return;
	    }
	}
	String newText = ((Text) e.widget).getText();
	newText = newText.substring(0, e.start) + eText + newText.substring(e.end);
	if (ConversionUtils.toDouble(newText) == null) {
	    if (!newText.equals(".")) {
		e.display.beep();
		e.doit = false;
		return;
	    }
	}
    }
}
